#ifndef _TD_TOWER_FACTORY_H_
#define _TD_TOWER_FACTORY_H_

/************************************************************************/
/* Core																	*/
/************************************************************************/
#include "Core/Singleton.h"

/************************************************************************/
/* Game																	*/
/************************************************************************/
//Towers 
#include "Game/Game objects/Towers/BaseTower.h"
#include "Game/Game objects/Towers/FlowerTower.h"
#include "Game/Game objects/Towers/ShyguyTower.h"
#include "Game/Game objects/Towers/MagikoopaTower.h"
#include "Game/Game objects/Towers/LakituTower.h"
#include "Game/Game objects/Towers/SnifitTower.h"

using namespace std;
using namespace TD_Core;
using namespace TD_Resources;

namespace TD_Game {

	class TowerFactory : public Singleton<TowerFactory> {

	public:

		/************************************************************************/
		/* ctors and dtors					                                    */
		/************************************************************************/
		//Default constructor
		explicit TowerFactory();

		//Copy constructor
		explicit TowerFactory(const TowerFactory &rhs);

		//Assignment constructor
		TowerFactory& operator=(const TowerFactory &rhs);

		//Destructor
		~TowerFactory();


		/************************************************************************/
		/* Functionalities                                                      */
		/************************************************************************/

		static BaseTower * createBaseTower(towerTypes towerType, unsigned int g_ID, const Coord2D & turretPosition);
		static const BaseTower * getBaseTowerReference(towerTypes towerType);
	};

}
#endif